<?php
namespace app\home\controller;
/*                .-~~~~~~~~~-._       _.-~~~~~~~~~-.
*             __.'              ~.   .~              `.__
*           .'//        保佑      \./        无bug      \\`.
*         .'//                     |                     \\`.
*       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \\`.
*     .'//.-"                 `-.  |  .-'                 "-.\\`.
*   .'//______.============-..   \ | /   ..-============.______\\`.
 .'______________________________\|/______________________________`.
     文件上传控制器
 */
use OSS\Core\OssException;
use OSS\OssClient;
use think\facade\Db;

class Upload
{
    /**
     * 图片上传方法
     * @return [type] [description]
     */
    public function upload()
    {

        if(request()->file('file')){
            $file = $_FILES['file'];
        }else{
            return json(['code'=>400,'msg'=>'没有上传文件']);
        }


        //查询配置
        $this->model = app('app\common\model\system\Configuration');
        //查询配置
        //$aliyun=$this->model->where('group_id',15)->column('val');
        $aliyun=Db::table('bgt_configuration')->where('group_id',15)->column('val');

        $size=Db::table('bgt_configuration')->where('group_id',16)->column('val');


        if ($file){
            $name = $file['name'];
            $format = strrchr($name,'.');//截取文件后缀名如 (.jpg)

            switch(substr($file['type'],0,strrpos($file['type'],'/'))){
                case 'image':if($file['size'] > (int)$size[1] * 1024 *1024){
                    return json(['code'=>400,'msg'=>'图片文件过大，不得超过'.$size[1].'M']);
                };break;
                case 'video':if($file['size'] > (int)$size[5] *1024 *1024){
                    return json(['code'=>400,'msg'=>'视频文件过大，不得超过'.$size[5].'M']);
                };break;
                case 'audio':if($file['size'] > (int)$size[3] *1024 *1024){
                    return json(['code'=>400,'msg'=>'音频文件过大，不得超过'.$size[3].'M']);
                };break;
            }
            /*判断是否支持此格式*/
//            if(!in_array(ltrim($format,'.'),explode(',',trim($attachment['img_suffix']))) && !in_array(ltrim($format,'.'),explode(',',trim($attachment['sound_suffix'])))){
//                return json(['code'=>400,'msg'=>'不支持当前格式']);
//            }
            // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
            $accessKeySecret = $aliyun[1];$accessKeyId = $aliyun[0];
            // Endpoint以杭州为例，其它Reg'ion请按实际情况填写。
            $endpoint = $aliyun[3];
            // 存储空间名称
            $bucket = $aliyun[2];

            // 尝试执行
            try {
                //实例化对象 将配置传入
                $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
                //这里是有sha1加密 生成文件名 之后连接上后缀
                $fileName = 'upload/'.date("Ymd").'/'.sha1(date('Y-m-d H:i:s',time()).uniqid()).$format;
                //执行阿里云上传
                $result = $ossClient->uploadFile($bucket,$fileName,$file['tmp_name']);

                $res['url'] = $result['info']['url'];$res['msg'] = '上传成功';$res['code'] = 0;
                $res['data']['src'] = $result['info']['url'];
                return json($res);
            } catch (OssException $e){
                return json(['code'=>400,'msg'=>$e->getMessage()]);
            }
        } else {
            // 上传失败
            return json(['code'=>400,'msg'=>'上传失败']);
        }
    }
}